Systems Manager でパブリック EC2 インスタンスがマネージドインスタンスとして認識されず、ログに「lookup i/o timeout」エラーが出力されている場合の対処方法
困っていた内容
AWS Systems Manager のセッションマネージャーを利用したいのですが、[フリートマネージャー]を確認したところ、対象のパブリックインスタンス(Amazon Linux 2)がマネージドインスタンスとして表示されません。
以下の公式 URL をもとに確認を行いましたが、特に設定に問題はありませんでした。
対象インスタンスにログインして/var/log/amazon/ssm
配下のログを確認したところ、以下のようなエラーが出力されていました。対処方法について教えてください。
$ cat /var/log/amazon/ssm/amazon-ssm-agent.log (省略) RequestError: send request failed caused by: Post "https://ssm.us-west-2.amazonaws.com/": dial tcp: lookup ssm.us-west-2.amazonaws.com on 172.31.0.0:53: read udp 172.31.2.105:42069->172.31.0.0:53: i/o timeout
どう対応すればいいの?
原因
このエラーは DNS サーバー 172.31.0.0 によるssm.us-west-2.amazonaws.com
の名前解決が失敗したことを示しています。そのため、名前解決に利用している DNS サーバーの IP アドレスを修正します。
対象 EC2 インスタンスの/etc/resolv.conf
を確認したところ、172.31.0.0を指定していました。
$ cat /etc/resolv.conf options timeout:2 attempts:5 ; generated by /usr/sbin/dhclient-script search us-west-2.compute.internal nameserver 172.31.0.0
しかし、対象 EC2 インスタンスの VPC の CIDR は 172.31.0.0/16 のため、名前解決に利用する Amazon DNS サーバーは 172.31.0.2 となります。
AmazonProvidedDNS は、169.254.169.253 (および VPC IPv4 ネットワークの範囲に 2 をプラスした値のリザーブド IP アドレスで) および fd00:ec2::253 で実行する DNS サーバーにマッピングします。例えば、10.0.0.0/16 ネットワークの DNS サーバーの位置は 10.0.0.2 となります。複数の IPv4 CIDR ブロックを持つ VPC の場合、DNS サーバーの IP アドレスはプライマリ CIDR ブロックにあります。
修正方法
以下のコマンドで DNS サーバーの IP アドレスを修正します。
まずはルートユーザーに変更します。
$ sudo su -
/etc/dhcp/
に移動して、cat dhclient.conf
で指定している IP アドレスを確認します。
# cd /etc/dhcp/ # cat dhclient.conf supersede domain-name-servers 172.31.0.0;
vi dhclient.conf
で正しい IP アドレスに修正します。
# vi dhclient.conf supersede domain-name-servers 172.31.0.2;
/etc/sysconfig/network-scripts
に移動して、cat ifcfg-eth0
で PEERDNS の値が yes になっていることを確認します。
# cd /etc/sysconfig/network-scripts # cat ifcfg-eth0 PEERDNS=yes
※/etc/dhcp/dhclient.conf
ではなく、/etc/sysconfig/network-scripts/ifcfg-*
配下で DNS サーバーの IP アドレスを指定している場合は上記の方法ではなく、オプション2の方法で正しい値を指定します。
そして対象インスタンスの再起動を行います。